#include "sos.h"

void SOSAlarm(void);      // 声明函数
int StorageGpsInfo(void); // 声明函数

struct Telephone_information Phone_Info; // 定义结构体变量

extern GPSInfo GPSRecvData;

int sendMessageState = 0;
/*
 *函数名称:SOS_Mode
 *函数功能:进入SOS模式
 *参数:无
 *返回值:无
 *备  注:无
 */
void SOS_Mode(void)
{
    StorageGpsInfo(); // 将解析到的GPS信息存储到Chinese_message中

    strcpy(Phone_Info.Unicode_phonenumber, "00310037003300390030003300350030003900330034"); // 对应我的电信手机号码

    SOSAlarm(); // 声光报警

    sendMessageState = sim900a_send_chmessage_zc(Phone_Info.Unicode_phonenumber, Phone_Info.Chinese_message); // 发送紧急短信到指定手机

    // 发完消息之后把短信内容清空
    memset(Phone_Info.Chinese_message, 0, sizeof(Phone_Info.Chinese_message));
}

/*
 *函数名称:StorageGpsInfo
 *函数功能:将解析到的GPS信息存储到Chinese_message中
 *参数:无
 *返回值:无
 *备  注:无
 */
int StorageGpsInfo(void)
{
    unsigned short ucs2_str[256]; // 注意这里改为无符号短整数数组
    const char *data = NULL;      // 接收GPS分析后的数据
    int ucs2_length = 0;
    int i;

    data = AnalyzeGPSData();
    printf("data:%s\n", data);

    // 将 UTF-8 编码的字符串转换为 UCS-2 编码的字符串
    ucs2_length = utf8_to_ucs2((const unsigned char *)data, ucs2_str,
                               sizeof(ucs2_str) / sizeof(ucs2_str[0]));
    if (ucs2_length < 0)
    {
        // printf("UTF-8 转换为 UCS-2 编码失败\r\n");
        return 0;
    }

    // 存储将UCS-2 编码的字符串

    for (i = 0; i < ucs2_length; i++)
    {
        sprintf(&Phone_Info.Chinese_message[i * 4], "%04X", ucs2_str[i]); // 按照十六进制，每4位为一组
    }

    return 1;
}

/*
 *函数名称:SOSAlarm
 *函数功能:发出声光警报
 *参数:无
 *返回值:无
 *备  注:经测试该函数会延时6s左右
 */
void SOSAlarm(void)
{
    int i = 0;
    // 发出5次的警示
    for (i = 0; i < 5; i++)
    {
        SOS_LED_LOOP(); // 灯光闪烁
        BEEP_ON();      // 发出警报声
        delay_ms(500);
    }
    BEEP_OFF();
}
